package domain

import (
	"github.com/hlhutu/gormplus"
	"ruoyi-go/internal/framework/db"
	"time"
)

type SysUser struct {
	// 用户ID
	UserID int `json:"userId" gorm:"user_id,primaryKey"`
	// 部门ID
	DeptID int `json:"deptId" gorm:"dept_id"`
	// 用户账号
	UserName string `json:"userName"`
	// 用户昵称
	NickName string `json:"nickName"`
	// 用户邮箱
	Email string `json:"email"`
	// 手机号码
	Phonenumber string `json:"phonenumber"`
	// 用户性别
	Sex string `json:"sex"`
	// 用户头像
	Avatar string `json:"avatar"`
	// 密码
	Password string `json:"password"`
	// 账号状态（0正常 1停用）
	Status string `json:"status"`
	// 删除标志（0代表存在 2代表删除）
	DelFlag string `json:"delFlag"`
	// 最后登录IP
	LoginIP string `json:"loginIp"`
	// 最后登录时间
	LoginDate time.Time `json:"loginDate"`

	/**
	冗余字段
	*/

	// 部门对象
	Dept *SysDept `json:"dept" gorm:"-"`
	// 角色对象
	Roles []*SysRole `json:"roles" gorm:"-"`
	// 角色组
	RoleIDs []int `json:"roleIds" gorm:"-"`
	// 岗位组
	PostIDs []int `json:"postIds" gorm:"-"`
	// 角色ID
	RoleID int `json:"roleId" gorm:"-"`
}

func (m SysUser) IsAdmin() bool {
	return IsAdminUser(m.UserID)
}

func IsAdminUser(userId int) bool {
	return userId == 1 // id为1才是超管
}

func (m SysUser) TableName() string {
	return "sys_user"
}

type sysUserModel struct {
	gormplus.Model[SysUser]
}

var sysUserModelInst *sysUserModel

func SysUserModel() *sysUserModel {
	if sysUserModelInst == nil {
		sysUserModelInst = &sysUserModel{Model: gormplus.NewModel(SysUser{}, db.GormDB)}
	}
	return sysUserModelInst
}
